"""
反序列化
校验不通过测试
"""
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'p43.settings')
django.setup(set_prefix=False)
# 所有测试代码，都要在上面4行之下

from employee.models import Employee
from employee.serializers import EmpSerializer

emgr = Employee.objects

# 浏览器POST数据为JSON字符串，被DRF request进一步封装为dict
data = {
	'emp_no': 10021, 'birth_date': '1963-06-01',
	'first_name': 'Duangkaew', 'last_name': 'Piveteau',
	'gender': '3', 'hire_date': '1989-08-24'
	} # 注意，这是字典数据是data，不是Employee的实例
# gender的2故意使用了字符串
# 反序列化
serializer = EmpSerializer(data=data) # 注意参数是data不是instance
# print(serializer.data) # 没有调用.is_valid()直接报错，客户端提交数据不可信，第一步需要验证
validated = serializer.is_valid(raise_exception=False)  # 校验   为了不直接报错 把参数改为False
# is_valid方法调用内部成功会把数据放在_validated_data属性
# raise_exception验证失败是否抛异常
# serializer.error 可以查看错误信息
# 设置为True 会报错 rest_framework.exceptions.ValidationError: {'gender': [ErrorDetail(string='“3” 不是合法选项。', code='invalid_choice')]}
print(validated)
print(serializer.data) # 返回给浏览器的数据
print(serializer.validated_data) # 校验后准备入库的数据
""" 结果：校验未通过，validated结果为False，校验后准备入库的数据为{}
False
{'emp_no': 10021, 'birth_date': '1963-06-01', 'first_name': 'Duangkaew', 'last_name': 'Piveteau', 'gender': '3', 'hire_date': '1989-08-24'}
{}
"""